package Main; import java.util.*; import java.util.ArrayList; /** * * @author Lorand * */ public class Queue implements Runnable { public ArrayList<Client> clients; protected boolean flag; protected boolean rdy; /** * Constructor */ public Queue() { this.clients = new ArrayList<Client>(); flag = true; } /** * Metoda prin care adaugam in lista de clienti, un client la sf cozii * * @param c */ protected void introduceClient(Client c) { clients.add(0, c); } /** * Metoda care sterge clientul din coada * * @return */ protected Client deleteClient() { Client cl = clients.get(0); clients.remove(0); return cl; } /** * Metoda care returneaza clientul care ajunge la casa(primul din coada) * * @return */ protected Client outClient() { Client cl = clients.get(clients.size() - 1); return cl; } /** * Metoda de afisare a cozii la fiecare casa */ public String toString() { String queue = ""; int time = 0, i; for (i = clients.size() - 1; i >= 0; i--) { time = time + clients.get(i).serviceTime; queue = queue + clients.get(i).toString(time, i) + " "; } return queue; } /** * * @return */ protected boolean idFlag() { return flag; } /** * * @param flag */ protected void setFlag(boolean flag) { this.flag = flag; } /** * Metoda care returneaza timpul de asteptare de la o coada * * @return */ protected int getWaitingTime() { int time, i; time = 0; /* * if(clients.size()==0) return 0; else */ for (i = 0; i <= clients.size() - 1; i++) time = time + clients.get(i).getServiceTime(); return time; } /** * Metoda care va afisa la fiecare secunda coada, decrementand timpul de * asteptare si scotand cate un client. Se aplica pt toate thread-urile * care vor exista pe obiectele de tip Queue */ @Override public void run() { int a = 0, ok = 0, timpp = 0, contor = 0; while (flag) { if (a == Algorithm.contor) rdy = true; else if (clients.isEmpty()) { a++; rdy = false; GUI.queues[Integer.parseInt(Thread.currentThread().getName())].setText(" "); // cozile // din // gui } else { Client clnt = this.outClient(); int time = clnt.serviceTime; if (ok == 0) timpp = timpp + time; ok = 1; GUI.queues[Integer.parseInt(Thread.currentThread().getName())].setText(this.toString()); // cozile // din // gui time--; clients.get(clients.size() - 1).setServiceTime(time); if (time == 0) { ok = 0; clients.remove(clients.size() - 1); contor++; } a++; rdy = false; } System.out.print(""); } GUI.queues[Integer.parseInt(Thread.currentThread().getName())].setText(" "); // cozile // din // gui GUI.afTimpMediu.setText("" + (timpp / contor)); // System.out.println("timpuuuuul " +timpp/contor); } }